// author: shelman
// description：封装了Web服务示例的接口
#pragma once


#include <vector>
#include <memory>
#include <stdint.h>
#include "export_def.h"



class CivetServer;
class WebsocketBaseHandler;
class HttpServerBaseHandler;



class API_EXPORT_DECL WebService
{
public:
    /***************************************************************
     * 功能：构造函数
    * *************************************************************/
    WebService();

    /***************************************************************
     * 功能：析构函数
     * *************************************************************/
    ~WebService();

    /***************************************************************
     * 功能：初始化civetweb库，只需要在网络通信开始之前调用一次
     * *************************************************************/
    static void initLib();

    /***************************************************************
     * 功能：反初始化civetweb库，只需要在网络通信结束之后调用一次
     * *************************************************************/
    static void deinitLib();

    /***************************************************************
     * 功能：开始服务
     * 输入参数：
     *      usPort：服务端口
     * *************************************************************/
    void start(unsigned short usPort);

    /***************************************************************
     * 功能：停止服务
     * *************************************************************/
    void stop();

    /***************************************************************
     * 功能：获取服务状态
     * 返回值：
     *      bool：运行状态，true -- 运行中，false -- 停止运行
     * *************************************************************/
    bool isRunning() const;

    /***************************************************************
     * 功能：获取服务端口信息
     * 返回值：
     *      unsigned int：服务端口信息
     * *************************************************************/
    unsigned int getSrvPort() const;

private:
    volatile bool m_bRunning = false; // 模块运行状态标志
    unsigned short m_usSrvPort = 10000; // 默认的服务端口
    std::shared_ptr<CivetServer> m_spCivetSrv = nullptr; // CivetServer实例智能指针
    std::vector<std::shared_ptr<WebsocketBaseHandler>> m_vtWsHandlers; // Websocket业务句柄集合
    std::vector<std::shared_ptr<HttpServerBaseHandler>> m_vtHttpHandlers; // Http业务句柄集合

};

